package config

import (
	"log"

	"internal-net-bridge-server/internal/models"
)

// AutoMigrate 自动迁移数据库
func AutoMigrate() error {
	log.Println("🔄 开始数据库迁移...")

	// 自动迁移所有模型
	err := DB.AutoMigrate(
		// 用户相关
		&models.User{},
		&models.VerificationCode{},
		&models.UserSession{},

		// 隧道相关
		&models.TunnelMapping{},

		// 配置相关
		&models.Config{},
	)

	if err != nil {
		log.Printf("❌ 数据库迁移失败: %v", err)
		return err
	}

	log.Println("✅ 数据库迁移完成")
	log.Println("   ├─ 用户表: tb_users, tb_verification_codes, tb_user_sessions")
	log.Println("   ├─ 隧道表: tb_tunnel_mapping")
	log.Println("   └─ 配置表: tb_config")

	return nil
}

// CreateDefaultAdmin 创建默认管理员账户
func CreateDefaultAdmin() error {
	var adminUser models.User

	// 检查是否已存在管理员
	err := DB.Where("role = ? AND username = ?", "admin", "admin").First(&adminUser).Error
	if err == nil {
		log.Println("📋 默认管理员账户已存在")
		return nil
	}

	// 创建默认管理员
	phone := "13800138000"
	email := "admin@example.com"

	adminUser = models.User{
		Username: "admin",
		Email:    email,
		Phone:    &phone,
		Password: "$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi", // password: password
		Status:   "active",
		Role:     "admin",
	}

	if err := DB.Create(&adminUser).Error; err != nil {
		log.Printf("❌ 创建默认管理员失败: %v", err)
		return err
	}

	log.Println("✅ 默认管理员账户创建成功")
	log.Printf("📋 管理员信息: 用户名=admin, 手机=%s, 密码=password", phone)

	return nil
}
